// 本地存储通用模块
import storage from 'good-storage';

// 判断列表内有没有当前歌曲
function inertArray(arr, val, compare, maxLen) {
  const index = arr.findIndex(compare);
  // 已存在
  if (index === 0) {
    // 已在数组最顶端,无需移动位置
    return;
  }
  if (index > 0) {
    // 需将歌曲添加至首位
    arr.splice(index, 1);
  }
  // 向数组插入歌曲
  arr.unshift(val);
  // 如果maxLen传入,且当前数组长度大于maxLen,就对数组进行处理
  if (maxLen && arr.length > maxLen) {
    arr.pop();
  }
}

// 保存
// item 当前歌曲
// key 本地存储字段名
// compare 外部传入函数
// maxLen 最大长度
export function save(item, key, compare, maxLen) {
  // 读取本地元素,如果没有存储过则为[]
  const items = storage.get(key, []);
  inertArray(items, item, compare, maxLen);
  // 保存本地数据
  storage.set(key, items);
  return items;
}

// 移除
export function remove(key, compare) {
  const items = storage.get(key, []);
  deleteFromArray(items, compare);
  storage.set(key, items);
  return items;
}

function deleteFromArray(arr, compare) {
  const index = arr.findIndex(compare);
  if (index > -1) {
    arr.splice(index, 1);
  }
}

// 读取数据
export function load(key) {
  return storage.get(key, []);
}

// 清空列表
export function clear(key) {
  storage.remove(key);
  return [];
}

// 存储整个数组
export function saveAll(items, key) {
  storage.set(key, items);
}
